////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  camxcafdalgorithmhandler.h
/// @brief This class handle creation  of AFD algorithm
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef CAMXCAFDALGORITHMHANDLER_H
#define CAMXCAFDALGORITHMHANDLER_H

#include "chiafdinterface.h"
#include "camxstatscommon.h"

CAMX_NAMESPACE_BEGIN

/// @brief Internal AFD data
struct AFDInternalData
{
    CHIAFDAlgorithm  algoOps;       ///< AFD Algorithm operations that can be performed
    VOID*            pAFDCoreAlgo;  ///< AFD Algorithm handle
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief This class handles AFD algo creation
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class CAFDAlgorithmHandler
{
public:

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// CreateAlgorithm
    ///
    /// @brief  This method creates an instance to the AFAlgorithm.
    ///
    /// @param  pCreateParams          Pointer to create params
    /// @param  ppAfAlgorithm          Pointer to the created AfAlgorithm instance
    ///
    /// @return CamxResultSuccess if successful
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual CamxResult CreateAlgorithm(
        const AFDAlgoCreateParamList*    pCreateParams,
        CHIAFDAlgorithm**                ppAfAlgorithm);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// CAFDAlgorithmHandler
    ///
    /// @brief  default constructor
    ///
    /// @return None
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    CAFDAlgorithmHandler() = default;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ~CAFDAlgorithmHandler
    ///
    /// @brief  destructor
    ///
    /// @return None
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~CAFDAlgorithmHandler() = default;

private:
    CAFDAlgorithmHandler(const CAFDAlgorithmHandler&) = delete;               ///< Do not implement copy constructor
    CAFDAlgorithmHandler& operator=(const CAFDAlgorithmHandler&) = delete;    ///< Do not implement assignment operator
};

CAMX_NAMESPACE_END

#endif // CAMXCAFDALGORITHMHANDLER_H
